

import sys
import os
# 将项目根目录添加到Python路径
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))

# 正确的导入方式
from wechat.SUD_GetMessage import _init_wechat   # 导入微信实例
import time                 # 时间模块
import random               # 随机数模块
from core.logger import get_logger  # 导入日志模块

# 创建模块特定的日志记录器
logger = get_logger("SUD_NewMessage_Received")

# 好友未读消息监听函数
def check_messages(timeout=90):
    """
    监听好友未读消息
    
    参数:
        timeout (int): 最大监听时间（秒），默认为90秒
    
    返回:
        str/False: 返回好友名称或False（超时）
    """
    try:
        # 初始化微信实例
        wx = _init_wechat()

        # 记录开始时间
        start_time = time.time()    
        logger.info(f"【监听开始】开始监听好友消息，超时时间: {timeout}秒")
        
        while True:

            # 检查是否超时
            elapsed = time.time() - start_time
            if time.time() - start_time > timeout:
                logger.info(f"【监听超时】已监听 {int(elapsed)} 秒无新消息，停止本轮监听")
                return False
            
            # 获取下一个新消息
            messages = wx.GetNextNewMessage(filter_mute=False)
            
            # 随机延迟（0.8-1.5秒）
            time.sleep(random.uniform(0.8, 1.5))
            
            if not messages or 'chat_type' not in messages: # 如果消息为空或没有chat_type，则继续等待
                logger.debug("等待新消息中...")
                time.sleep(random.uniform(1.0, 2.0))  # 随机重试间隔
                continue
            
            # 调试信息输出
            chat_name = messages["chat_name"]           # 聊天窗口名称
            chat_type = messages["chat_type"]           # 聊天类型
            msg_sender = messages["msg"][0].sender      # 发送者
        
            logger.info("-"*40)
            logger.info("【消息检测】检测到新消息")
            logger.info(f"【聊天窗口】{chat_name}")     
            logger.info(f"【聊天类型】{chat_type}")    
            logger.info(f"【发送者】{msg_sender}")
            
            
            # 双重验证：聊天类型为好友且名称与发送人一致
            if messages.get('chat_type') == 'friend' and messages['chat_name'] == messages['msg'][0].sender:
                logger.info(f"【验证通过】确认为好友 '{chat_name}' 的私信消息")
                return messages['chat_name']  # 返回chat_name参数
            
            else:
                logger.warning("【验证失败】非私聊好友消息，继续监听中...")
            
            time.sleep(random.uniform(1.0, 2.0))  # 随机循环间隔

    except Exception as e:
        logger.error(f"【错误】微信监听异常: {str(e)}", exc_info=True)
        
        # 发生异常时增加延迟，避免立即重试
        time.sleep(random.uniform(2.0, 3.0))
        
        return False

if __name__ == "__main__":
    logger.info("开始执行SUD_NewMessage_Received主程序")
    check_messages()
    logger.info("SUD_NewMessage_Received主程序执行完毕")
